home *** CD-ROM | disk | FTP | other *** search
Wrap
package com.ms.xml.dso; import com.ms.osp.DataSourceListener; import com.ms.osp.OLEDBSimpleProvider; import com.ms.xml.om.Document; import com.ms.xml.om.Element; import com.ms.xml.om.ElementEnumeration; import com.ms.xml.util.Name; import com.ms.xml.util.XMLOutputStream; import java.applet.Applet; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.io.StringBufferInputStream; import java.net.URL; import java.util.Enumeration; import java.util.TooManyListenersException; import java.util.Vector; import netscape.javascript.JSObject; public class XMLDSO extends Applet { private XMLRowsetProvider myProvider; private DataSourceListener myDSL; private Document document = new Document(); private Document schema; private Element schemaRoot; private String error; private URL url; private boolean loaded = false; private boolean inlineXML = false; static Name nameOSP = Name.create("OSP"); public Object getSchema() { if (this.schema != null) { ByteArrayOutputStream var1 = new ByteArrayOutputStream(); try { this.schema.save(new XMLOutputStream(var1)); } catch (Exception var4) { this.setError(((Throwable)var4).toString()); } return var1.toString(); } else { return null; } } private int drawText(Graphics var1, String var2, int var3, int var4, int var5, boolean var6, int var7) { if (var2 != null && var2.length() != 0) { if (var5 < 5) { return var4; } else { int var8 = 0; int var10 = 0; int var9; if (var7 == 0) { var9 = var2.length(); } else { var9 = var7; } while(var8 < var9 && var6 && this.isWhiteSpace(var2.charAt(var8))) { ++var8; } FontMetrics var11 = var1.getFontMetrics(); int var12 = var8; int var13 = var8; while(var8 < var9) { char var14 = var2.charAt(var8); int var15 = var11.charWidth(var14); var10 += var15; if (var10 <= var5 && var14 != '\n') { if (var6 && this.isWhiteSpace(var14)) { var12 = var8; } ++var8; } else { if (var14 == '\n' && var2.charAt(var8 - 1) == '\r') { var12 = var8 - 1; } else if (var13 == var12) { var12 = var8; } String var16 = var2.substring(var13, var12); var1.drawString(var16, var3, var4 + var11.getMaxAscent()); var4 += var11.getHeight(); if (var14 == '\n' && var2.charAt(var8 - 1) == '\r') { var12 = var8 + 1; } while(var6 && var12 < var9 && this.isWhiteSpace(var2.charAt(var12))) { ++var12; } var8 = var12; var13 = var12; var10 = 0; } } String var17 = var2.substring(var13); var1.drawString(var17, var3, var4 + var11.getMaxAscent()); return var4; } } else { return var4; } } boolean updateTree(Element var1, Element var2, XMLRowsetProvider var3) { int var4 = var2.getType(); if (var4 != 2 && var4 != 5) { if (var4 != 1 && var4 != 11) { String var5 = (String)var2.getAttribute("UPDATE-ACTION"); if (var5 == null || !var5.equalsIgnoreCase("APPEND") && !var5.equalsIgnoreCase("INSERT")) { int var19 = var2.numElements(); if (var19 > 0) { int var20 = 0; ElementEnumeration var21 = new ElementEnumeration(var1, var2.getTagName(), 0); while(var21.hasMoreElements()) { ++var20; Element var22 = (Element)var21.nextElement(); XMLRowsetProvider var10 = null; if (var3 != null) { var10 = var3.findChildProvider(var22); } Vector var12 = new Vector(); boolean var13 = false; ElementEnumeration var11 = new ElementEnumeration(var2); while(var11.hasMoreElements()) { Element var14 = (Element)var11.nextElement(); String var15 = (String)var14.getAttribute("UPDATE-ACTION"); if (var15 != null && !var15.equalsIgnoreCase("APPEND") && !var15.equalsIgnoreCase("INSERT")) { var12.addElement(var14); } else { var13 = this.updateTree(var22, var14, var10); if (!var13) { break; } } } if (var13) { Enumeration var23 = var12.elements(); while(var23.hasMoreElements()) { Element var24 = (Element)var23.nextElement(); String var16 = (String)var24.getAttribute("UPDATE-ACTION"); var24.removeAttribute("UPDATE-ACTION"); if (var3 != null) { if (var16.equalsIgnoreCase("REPLACE")) { int var17 = this.getColumn(var3.getSchema(), var24); var3.setVariant(var20, var17, 0, var24.getText()); } else if (var16.equalsIgnoreCase("REMOVE")) { int var25 = this.getColumn(var3.getSchema(), var24); var3.setVariant(var20, var25, 0, ""); } } else { ElementEnumeration var26 = new ElementEnumeration(var22, var24.getTagName(), 0); Element var18 = (Element)var26.nextElement(); if (var16.equalsIgnoreCase("REPLACE")) { var22.addChild(var24, var18); if (var18 != null) { var22.removeChild(var18); } } else if (var16.equalsIgnoreCase("REMOVE") && var18 != null) { var22.removeChild(var18); } } } return true; } } } return false; } else { var2.removeAttribute("UPDATE-ACTION"); if (var3 != null) { int var6 = 1; if (var5.equalsIgnoreCase("APPEND")) { var6 += var3.getRowCount(); } var3.insertRows(var6, 1); ElementEnumeration var7 = new ElementEnumeration(var2, (Name)null, 0); while(var7.hasMoreElements()) { Element var8 = (Element)var7.nextElement(); int var9 = this.getColumn(var3.getSchema(), var8); var3.setVariant(var6, var9, 0, var8.getText()); } } else { var1.addChild(var2, (Element)null); } return true; } } else { return var1.getText().equals(var2.getText()); } } else { return true; } } public void handleUpdate(Element var1) { if (this.document == null) { this.document = new Document(); this.document.addChild(var1, (Element)null); this.updateSchema(); } else { Element var2 = this.document.getRoot(); ElementEnumeration var3 = new ElementEnumeration(var1); while(var3.hasMoreElements()) { Element var4 = (Element)var3.nextElement(); this.updateTree(var2, var4, this.myProvider); } } } public Object getDocument() { return this.document; } void generateSchema(Element var1, SchemaNode var2) { ElementEnumeration var3 = new ElementEnumeration(var1); while(var3.hasMoreElements()) { Element var4 = (Element)var3.nextElement(); int var5 = var4.getType(); Name var6 = var4.getTagName(); if (var5 == 0) { SchemaNode var7 = var2.setRow(var6); this.generateSchema(var4, var7); } } if (var2.e == null) { var2.createElement(false); } } public void paint(Graphics var1) { Dimension var2 = ((Component)this).size(); if (var2.width > 0 && var2.height > 0) { if (this.error == null) { var1.setColor(Color.green); } else { var1.setColor(Color.red); } var1.fillRect(0, 0, var2.width, var2.height); String var3 = this.error; if (var3 == null) { if (this.url != null) { var3 = "Successfully loaded XML from \"" + this.url.toString() + "\""; } else if (this.inlineXML) { var3 = "Successfully loaded inline XML"; } else if (this.document.getRoot() != null) { var3 = "Successfully loaded document."; } else { var3 = "Empty"; } } var1.setColor(Color.black); this.drawText(var1, var3, 5, 5, var2.width - 10, true, 0); } } public Object getXML() { if (this.document != null) { ByteArrayOutputStream var1 = new ByteArrayOutputStream(); try { XMLOutputStream var2 = new XMLOutputStream(var1); this.document.save(var2); } catch (Exception var4) { this.setError(((Throwable)var4).toString()); } return var1.toString(); } else { return null; } } public void setRoot(Element var1) { this.document = new Document(); this.document.addChild(var1, (Element)null); this.updateSchema(); } public Element getRoot() { return this.document != null ? this.document.getRoot() : null; } private boolean isWhiteSpace(char var1) { return Character.isSpace(var1) || var1 == '\r'; } public void load(String var1) { URL var2 = ((Applet)this).getDocumentBase(); this.loaded = false; try { if (var2 == null) { this.url = new URL(var1); } else { this.url = new URL(var2, var1); } this.document.load(this.url); this.loaded = true; } catch (Exception var5) { this.setError("Error loading XML document '" + var1 + "'. " + ((Throwable)var5).toString()); } if (this.loaded && this.schema != null) { this.updateSchema(); } } public void handleUpdateString(String var1) { Document var2 = this.parseXML(var1); this.handleUpdate(var2.getRoot()); } public void updateSchema() { this.schema = new Document(); String var1 = ((Applet)this).getParameter("SCHEMA"); if (var1 != null && var1.length() > 0) { this.schema = this.parseXML(var1); this.schemaRoot = this.schema.getRoot(); } else if (this.document != null && this.document.getRoot() != null) { Element var2 = this.document.getRoot(); SchemaNode var3 = new SchemaNode(this.schema, this.schema, var2.getTagName()); this.generateSchema(var2, var3); ElementEnumeration var4 = new ElementEnumeration(this.schema.getRoot(), XMLRowsetProvider.nameROWSET, 0); this.schemaRoot = (Element)var4.nextElement(); } this.notifyListeners(); } public void save(String var1) { if (this.document != null) { try { FileOutputStream var2 = new FileOutputStream(var1); this.document.save(this.document.createOutputStream(var2)); return; } catch (Exception var4) { this.setError(((Throwable)var4).toString()); } } } public void removeDataSourceListener(DataSourceListener var1) { this.myDSL = null; } public OLEDBSimpleProvider msDataSourceObject(String var1) { if (this.document != null && this.document.getRoot() != null && this.schemaRoot != null) { this.myProvider = new XMLRowsetProvider(this.document.getRoot(), this.schemaRoot, this.document, (XMLRowsetProvider)null); } else { this.myProvider = null; } return this.myProvider; } public void addDataSourceListener(DataSourceListener var1) throws TooManyListenersException { this.myDSL = var1; } public void clear() { this.document = new Document(); this.updateSchema(); } public void notifyListeners() { if (this.myDSL != null) { try { this.myDSL.dataMemberChanged(""); return; } catch (Exception var3) { this.setError("Error notifying data members changed: " + ((Throwable)var3).toString()); } } } public void init() { super.init(); String var1 = ((Applet)this).getParameter("URL"); if (var1 != null && var1.length() > 0) { this.load(var1); } else { this.loaded = true; var1 = ((Applet)this).getParameter("ID"); if (var1 != null && var1.length() > 0) { Object var2 = null; try { var7 = (JSObject)((JSObject)JSObject.getWindow(this).getMember("document")).getMember(var1); } catch (Exception var5) { this.setError("Error finding <APPLET> with ID=" + var1 + ": " + ((Throwable)var5).toString()); return; } if (var7 != null) { String var3 = (String)var7.getMember("altHtml"); if (var3 != null && var3.length() > 0) { this.document = this.parseXML(var3); this.inlineXML = true; } } else { this.setError("Error finding <APPLET> with ID=" + var1); } } else { this.setError("No PARAM with NAME=URL was found, " + "so perhaps you specified the XML inside the APPET tag " + "but in order for this to work you must also specify " + "<PARAM NAME=\"APPLET\" VALUE=\"xmldso\">" + " where the value matches the ID of your APPLET tag."); } } this.updateSchema(); } public String getError() { return this.error; } private void setError(String var1) { this.error = var1; ((Component)this).repaint(); } public Document parseXML(String var1) { Document var2 = new Document(); if (var1 == null) { return var2; } else { try { var2.load(new StringBufferInputStream(var1)); } catch (Exception var5) { this.setError("Caught exception parsing given XML. " + ((Throwable)var5).toString()); } return var2; } } public void saveSchema(String var1) { if (this.schema != null) { try { FileOutputStream var2 = new FileOutputStream(var1); this.schema.save(new XMLOutputStream(var2)); return; } catch (Exception var4) { this.setError(((Throwable)var4).toString()); } } } int getColumn(Element var1, Element var2) { int var3 = 0; Enumeration var4 = var1.getElements(); while(var4.hasMoreElements()) { ++var3; Element var5 = (Element)var4.nextElement(); String var6 = var5.getAttribute("NAME").toString(); String var7 = var2.getTagName().toString(); if (var6.equals(var7)) { return var3; } } return 0; } }